package reflect;

import java.lang.reflect.Method;

/**
 * 反射机制可以访问类的私有成员
 * 暴力反射
 */
public class ReflectDemo7 {
    public static void main(String[] args) throws Exception {
//        Person p = new Person();
//        p.hehe();

        Class cls = Class.forName("reflect.Person");
        Object obj = cls.newInstance();
        /*
            Class对象
            getMethod()和getMethods()
            只能获取到该类中所有的公开方法(包括从超类继承的)

            getDeclaredMethod()和getDeclaredMethods()
            获取本类自己定义的所有方法(包含私有方法，但是不含有超类继承的)


            getDeclaredXXXX()都是用于获取本类自己定义的内容
         */
//        Method method = cls.getMethod("hehe");
        Method method = cls.getDeclaredMethod("hehe");
        method.setAccessible(true);//强行打开访问权限
        method.invoke(obj);//obj.hehe();
        method.setAccessible(false);
    }
}